﻿using System;
using System.Collections.Generic;
using System.Web.Mvc;
using log4net;
using TheBullysStore.Models;
using TheBullysStore.Models.ModuloAdministracion.DepartamentoPeru;
using TheBullysStore.Models.ModuloAdministracion.DistritoPeru;
using TheBullysStore.Models.ModuloAdministracion.Proveedor;
using TheBullysStore.Models.ModuloAdministracion.ProvinciaPeru;

namespace TheBullysStore.Controllers.ModuloAdministracion.Proveedor
{
    public class ProveedorController : Controller
    {
        //
        // GET: /Proveedor/

        private static ILog log = LogManager.GetLogger(typeof(ProveedorController));
        private TheBullysStoreDB db = new TheBullysStoreDB();
        ProveedorFacade proveedorFacade = new ProveedorFacade();
        DepartamentoPeruFacade departamentoPeruFacade = new DepartamentoPeruFacade();
        ProvinciaPeruFacade provinciaPeruFacade = new ProvinciaPeruFacade();
        DistritoPeruFacade distritoPeruFacade = new DistritoPeruFacade();

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Proveedor()
        {
            return View();
        }

        public ActionResult RegistrarProveedor()
        {
            return View();
        }

        public ActionResult BuscarProveedor()
        {
            return View();
        }

        [HttpPost]
        public JsonResult registrarProveedor(ProveedorBean proveedor)
        {
            try
            {
                if (proveedorFacade.Existeproveedor(proveedor))
                {
                    log.Warn("El proveedor: \"" + proveedor.RazonSocial + "\"ya ha sido creado");                    
                    return Json(new { me = "El proveedor ya existe" });
                }

                string conexion = proveedorFacade.Registrarproveedor(proveedor);

                return Json(new { me = "Se ingreso correctamente " + proveedor.RazonSocial });
                
            }
            catch (Exception ex)
            {
                log.Error("Registrar Proveedor - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            }
        }

        [HttpPost]
        public JsonResult buscarProveedor(ProveedorBean proveedor)
        {
            try
            {
                List<ProveedorBean> listaProveedor = proveedorFacade.ListarProveedor(proveedor);

                return Json(new { listaProveedor });
            }
            catch (Exception ex)
            {
                log.Error("Buscar Proveedor - GET(EXCEPTION):", ex);
                return Json(new { listaProveedor = "Ocurrió un error al buscar" });
            }
        }

        [HttpPost]
        public JsonResult eliminarProveedor(ProveedorBean proveedor)
        {
            try
            {
                string conexion = proveedorFacade.Eliminarproveedor(proveedor);

                return Json(new { me = "Se eliminó correctamente " + proveedor.RazonSocial });
            }
            catch (Exception ex)
            {
                log.Error("Eliminar Proveedor - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al eliminar" });
            } 
        }

        [HttpPost]
        public JsonResult modificarProveedor(ProveedorBean proveedor)
        {
            try
            {
                string conexion = proveedorFacade.Modificarproveedor(proveedor);

                return Json(new { me = "Se modificó correctamente " + proveedor.RazonSocial });               
            }
            catch (Exception ex)
            {
                log.Error("Modificar Proveedor - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al modificar" });
            } 
        }

        [HttpPost]
        public JsonResult cargarDepartamentos(DepartamentoPeruBean departamento)
        {
            try
            {
                List<DepartamentoPeruBean> listaDepartamentoPeru = departamentoPeruFacade.ListarDepartamentoPeru(departamento);

                return Json(new { listaDepartamentoPeru });
            }

            catch (Exception ex)
            {
                log.Error("CargarDepartamento - GET(EXCEPTION):", ex);
                return Json(new { listaDepartamentoPeru = "Ocurrió un error al cargar los Departamentos" });
            }

        }

        [HttpPost]
        public JsonResult cargarProvincias(DepartamentoPeruBean departamento)
        {
            try
            {
                List<ProvinciaPeruBean> listaProvinciaPeru = provinciaPeruFacade.ListarProvinciaPeru(departamento);

                return Json(new { listaProvinciaPeru });
            }
            catch (Exception ex)
            {
                log.Error("CargarProvincia - GET(EXCEPTION):", ex);
                return Json(new { listaProvinciaPeru = "Ocurrió un error al cargar las Provincias" });
            }
        }

        [HttpPost]
        public JsonResult cargarDistritos(ProvinciaPeruBean provincia)
        {
            try
            {
                List<DistritoPeruBean> listaDistritoPeru = distritoPeruFacade.ListarDistritoPeru(provincia);

                return Json(new { listaDistritoPeru });
            }

            catch (Exception ex)
            {
                log.Error("CargarDistrito - GET(EXCEPTION):", ex);
                return Json(new { listaDistritoPeru = "Ocurrió un error al cargar los Distritos" });
            }
        }
    }
}
